# STATIC METHOD
class C:
  def foo(x, y):
    print "staticmethod", x, y
  foo = staticmethod(foo)

C.foo(1, 2)
c = C()
c.foo(1, 2)

# CLASS METHOD
class C:
  def foo(cls, y):
    print "classmethod", cls, y
  foo = classmethod(foo)

C.foo(1)
c = C()
c.foo(1)

class D(C):
  pass

D.foo(1)
d = D()
d.foo(1)

class E(C):
  def foo(cls, y): # override C.foo
    print "E.foo() called"
    C.foo(y)
  foo = classmethod(foo)

E.foo(1)
e = E()
e.foo(1)